    <!DOCTYPE html>
<html lang="zh-CN">
	<head>
		<meta charset="utf-8">
		<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
		<meta name="viewport" content="width=device-width, initial-scale=1">
		<meta name="author" content="nodejh">
		<meta name="description" content="Describe your website">
		<meta name="generator" content="Hugo 0.16" />
		<title>Create and Manage MySQL User &middot; nodejh</title>
		<link rel="shortcut icon" href="http://nodejh.com/images/favicon.ico">
		<link rel="stylesheet" href="http://nodejh.com/css/style.css">
		
		<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.7.0/styles/atom-one-light.min.css">
		

		
		<link rel="stylesheet" href="http://nodejh.com/fontawesome/css/font-awesome.min.css">
		

		
		<link href="http://nodejh.com/index.xml" rel="alternate" type="application/rss+xml" title="nodejh" />
		
	</head>

    <body>
       <nav class="main-nav">
	
	
		<a href='http://nodejh.com/'> <span class="arrow">←</span>Home</a>
	

	
		<a href='http://nodejh.com/post'>Archive</a>
	

	
		<a href='http://nodejh.com/about'>About</a>
	

	
	<a class="cta" href="http://nodejh.com/index.xml">Subscribe</a>
	
</nav>


        <section id="wrapper">
            <article class="post">
                <header>
                    <h1>Create and Manage MySQL User</h1>
                    <h2 class="headline">
                    Apr 12, 2016 02:40
                    · 311 words
                    · 2 minutes read
                      <span class="tags">
                      
                      
                          
                              <a href="http://nodejh.com/tags/mysql">MySQL</a>
                          
                      
                      
                      </span>
                    </h2>
                </header>
                <section id="post-body">
                    

<h3 id="一-创建数据库用户">一.创建数据库用户</h3>

<p>首先用root账号进入MySQL：</p>

<pre><code>$ mysql -u root -p
</code></pre>

<p>然后输入密码即可。</p>

<p>新建用户有两种方式</p>

<pre><code>1.&gt; create user username@hostname identified by 'yourpassword';

2.&gt; insert into mysql.user(host,user,password) value('hostname','username',password('yourpassword'));
  &gt; flush privileges;
</code></pre>

<p>说明：
username：即将创建的用户名;
hostname：主机名。主机名为localhost表示用户可以本地登录；主机名为 % 表示远程访问，该用户可以从任意远程主机登陆。
yourpassword:该用户密码。如果密码为空，则该用户可不通过密码直接登录服务器。密码为空也可以直接写为：</p>

<pre><code> &gt; create user 'username'@'hostname';
</code></pre>

<p>flsu privileges:刷新权限。
方法1设置后不需刷新权限即可生效；方法2需要刷新权限才能生效。</p>

<p>例：</p>

<pre><code> &gt; create user test@localhost identified by 'testpasswd';
 &gt; create user test@'%' identified by 'testpasswd';
</code></pre>

<p>创建一个用户名为test的用户，并设置其本地访问和远程访问。注意通配符 % 需要加引号。</p>

<h3 id="二-查看已有用户">二.查看已有用户</h3>

<p>查看用户名，主机名，密码：</p>

<pre><code>&gt; select user,host,password from mysql.user;
</code></pre>

<h3 id="三-删除已有用户">三.删除已有用户</h3>

<p>删除也有两种方式。</p>

<pre><code>1.&gt; drop user username@hostname;
2.&gt; delete from mysql.user where user='usrname' and host='hostname';
</code></pre>

<p>说明：如果未指定主机名，则 drop user username 默认删除username@&lsquo;%&lsquo;；如果没有 username@&rsquo;%&lsquo;,则会提示 ERROR 1396 (HY000) 的错误。</p>

<h3 id="四-设置修改用户密码">四.设置修改用户密码</h3>

<p>同样有两种方式。</p>

<pre><code>1.&gt; set password for username@'hostname' = password('newpassword');
2.&gt; update mysql.user password=password('newpassword') where user='username' and host='hostname';
</code></pre>

<p>同样，方法一不需要刷新即可生效；方法2需要刷新才能生效。</p>

<h3 id="五-为用户分配数据库及数据库表的权限">五.为用户分配数据库及数据库表的权限</h3>

<p>MySQL给用户分配数据库（表）权限的命令可概括为</p>

<pre><code>grant 权限 on 数据库对象 to 用户
</code></pre>

<h5 id="1-分配某个数据库的所有权限">1.分配某个数据库的所有权限</h5>

<pre><code>&gt; grant all privileges on db.* to username@'%';
</code></pre>

<p>表示将数据库db中所有表的所有权限赋予用户username，通配符 % 表示可远程访问。</p>

<h5 id="2-分配数据库中一个表的所有权限">2.分配数据库中一个表的所有权限</h5>

<pre><code>&gt; grant all privileges on db.table to username@'%';
</code></pre>

<p>表示将数据库db中的table表的所有权限赋予用户username。</p>

<h5 id="3-分配创建-修改-删除-mysql-数据表结构权限">3.分配创建、修改、删除 MySQL 数据表结构权限。</h5>

<pre><code>&gt; grant create on db.* to username@'%';
&gt; grant alter  on db.* to username@'%';
&gt; grant drop   on db.* to username@'%';
</code></pre>

<p>操作 MySQL 外键权限</p>

<pre><code>&gt; grant references on db.* to username@'%';
</code></pre>

<p>操作 MySQL 临时表权限</p>

<pre><code>&gt; grant create temporary tables on db.* to username@'%';
</code></pre>

<p>操作 MySQL 索引权限</p>

<pre><code>&gt; grant index on db.* to username@'%';
</code></pre>

<p>操作 MySQL 视图、查看视图源代码 权限</p>

<pre><code>&gt; grant create view on db.* to username@'%';
&gt; grant show view on db.* to username@'%';
</code></pre>

<p>操作 MySQL 存储过程、函数 权限</p>

<pre><code>&gt; grant create routine on db.* to username@'%'; -- now, can show procedure status
&gt; grant alter routine on db.* to username@'%'; -- now, you can drop a procedure
&gt; grant execute on db.* to username@'%';
</code></pre>

<h3 id="六-查看用户权限">六.查看用户权限</h3>

<p>查看当前用户权限</p>

<pre><code>&gt; show grants;
</code></pre>

<p>查看其它用户权限</p>

<pre><code>&gt; show grants for username@'%';
</code></pre>

<h3 id="七-撤销已经赋予给-mysql-用户权限的权限">七.撤销已经赋予给 MySQL 用户权限的权限。</h3>

<p>revoke 与 grant 的语法类似，只需要把关键字 “to” 换成 “from” 即可：</p>

<pre><code>&gt; grant all on *.* to username@'%';
&gt; revoke all on *.* from username@'%';
</code></pre>

<h3 id="八-mysql-grant-revoke-用户权限注意事项">八.MySQL grant,revoke 用户权限注意事项</h3>

<ol>
<li><p>grant, revoke 用户权限后，该用户只有重新连接 MySQL 数据库，权限才能生效。</p></li>

<li><p>如果想让授权的用户，也可以将这些权限 grant 给其他用户，需要选项 “grant option“</p>

<blockquote>
<p>grant select on db.* to username@localhost with grant option;</p>
</blockquote></li>
</ol>

<p>这个特性一般用不到。实际中，数据库权限最好由 管理员 来统一管理。</p>

                </section>
            </article>

            <div id="disqus_thread"></div>
<div style="margin-top: 50px">
  评论: 请点击 Gtihub Issue 链接跳转到评论页面
</div>
</div>


            <footer id="footer">
    
        <div id="social">

	
	
    <a class="symbol" href="https://www.facebook.com/nodejh">
        <i class="fa fa-facebook-square"></i>
    </a>
    
    <a class="symbol" href="https://www.github.com/nodejh">
        <i class="fa fa-github"></i>
    </a>
    
    <a class="symbol" href="http://stackoverflow.com/users/4518882/nodejh">
        <i class="fa fa-stack-overflow"></i>
    </a>
    
    <a class="symbol" href="https://www.twitter.com/nodejh">
        <i class="fa fa-twitter"></i>
    </a>
    


</div>

    
    <p class="small">
    
        © Copyright 2016 <i class="fa fa-heart" aria-hidden="true"></i> nodejh
    
    </p>
</footer>

        </section>

        <script   src="https://code.jquery.com/jquery-2.2.4.js" integrity="sha256-iT6Q9iMJYuQiMWNd9lDyBUStIq/8PuOW33aOqmvFpqI="   crossorigin="anonymous"></script>
<script src="http://nodejh.com/js/main.js"></script>

<script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.7.0/highlight.min.js"></script>
<script>hljs.initHighlightingOnLoad();</script>




<script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');

ga('create', 'UA-84989670-1', 'auto');
ga('send', 'pageview');
</script>


    </body>
</html>
